Skip to main content

02 ✨新建工程

CubeMX中新建工程 导入到MDK编辑

up的视频讲解: https://space.bilibili.com/1455872040

1 ✨在CubeMX中新建程序​

  • 1 点击左上角file,选择new project
tips

第一次建立程序确保网络连接好

图片
  • 2 在左上角输入芯片型号,点击F103C8T6
图片
  • 3 选择F103C8T6,点击右上角的Start Project
图片
  • 4 简单介绍下:

左边是我们选择配置芯片外设的区域,右边是配置了外设后芯片引脚对应的状态

MCU之所以叫微控制器,就是它内部集成了丰富的外设 去控制与各个设备的交互,很显然物理上是通过 芯片的引脚 去连接,这也是为什么会分成这两部分的原因.

图片

2 🧭在CubeMX中配置​

先跟着up操作, 基础课会详细从硬件到软件解释原理!

知识点

一款芯片的最小系统,通常包含以下:

  • 电源
  • 晶振
  • 复位
  • 下载
  • 1 配置串行烧录接口(SW),用于下载程序到STM32
图片
  • 2 配置时钟RCC,选择外部石英晶体振荡器(简称 晶振)

(对点灯来说可以不用外部时钟,up这里是想让大家形成习惯,在以后的项目中都需要用到这个)

图片
  • 4 点击上方的Project Manager
    • 输入工程名
    • 选择IDE工具为MDK
图片
  • 5 点击左侧Code Generator,
    • 选择仅复制必要的库文件 (不然文件会很大)
    • 选择为每个外设生成一对.c/.h文件 (不然都会放到main.c里)
图片
  • 5 点击右上方 GENERATOR CODE 生成代码然后打开项目,此时cube会打开之前选择的IDE工具
图片
  • 6 我们可以看到我们的MDK左侧就是 Cube生成的代码 ,简单介绍以下
    • Application/MDK-ARM 启动文件
    • Application/User/Core 用户代码(你写程序、main 函数、初始化都在这里)
    • Drivers/STM32F1xx_HAL_Driver 外设驱动
    • Drivers/CMSIS 内核代码
图片

3 🐎导入到MDK编辑代码​

  • 1 打开main.c文件,往下翻找到main函数

(main函数是所有程序的入口 换句话说 所有程序都是在这里面按顺序执行的)

图片
  • 2 我们分析一下整个main函数,它分为了两个区域
    • 初始化区域 (程序从头开始执行一遍,进入循环后就一直在循环里了)
    • 无限循环区域 (程序在这里面不断循环)
图片
  • 3 细心的同学一定观察到,代码里面生成了很多一行一行的注释
    • CubeMX就是通过这样的方式去划分用户代码区间 和 自动生成的代码区间
    • 含有USER CODE就是给用户写代码的区间
    • 其他的就是CubeMX管的区间 (写在这里面 生成代码的时候会被删掉)
图片

4 🔥在MDK中编译并烧录​

  • 1 选择编译器 点击左上方魔法棒,在弹窗中点击 Target,在右侧选择 Version 6 编译器,点击OK
图片
  • 2 编译 点击左上角编译图标的中间图标,没有errors则表示编译成功
    • 左边图标: 仅编译当前打开的文件
    • 中间图标: 编译被修改过的文件 (修改了少量代码时使用) 最常用
    • 右边图标: 强制编译所有文件 (修改了系统配置时使用)
图片
  • 3 选择下载器 点击左上方魔法棒,在弹窗中点击Debug,在左侧选择ST-Link
图片
  • 4 编译下载(烧录) 点击左上角下载图标
图片
STLink

当此时STLink的蓝绿信号灯交替闪烁,就代表程序从电脑下载到了我们的微控值器(MCU)里面

✅生成代码后检查什么​

先看main里的调用顺序:HAL_Init、SystemClock_Config、各MX外设初始化,然后才进入while。用户代码放USER CODE BEGIN/END之间;独立驱动文件还需加入工程和包含路径。

SYS Debug保留Serial Wire,板上8 MHz晶体对应RCC的Crystal/Ceramic Resonator,不能选成外部有源时钟的Bypass。BOOT0保持正常Flash启动设置。保存.ioc,它记录的是配置本身;只保留main.c不能完整重建工程。

练习:先生成一个无业务代码的工程,确认编译下载,再加入点灯代码。若空工程都无法运行,先解决工具链与时钟问题。